package entities;


import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
@Table (name = "Pedidos")
public class PedidoCliente extends EntidadBase {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id 
	@Column (name = "idPedido")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int nroPedido;
	private float monto;
	private int volumen;
	private Date fechaCompra;
	private boolean pendiente;
	
	@ManyToOne
	@JoinColumn(name = "IdODV", referencedColumnName = "IdODV")
	private ODV odv;
	
	@OneToMany (cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
	@JoinColumn (name = "idPedido")
	private List<ItemPedido> items;
	
	@OneToMany (cascade = CascadeType.REMOVE)
	@LazyCollection(LazyCollectionOption.FALSE)
	@JoinColumn (name = "idPedido")
	private List<Envio> envios;
	
	@OneToMany(cascade = CascadeType.REMOVE)
	@LazyCollection(LazyCollectionOption.FALSE)
	@JoinColumn (name = "idPedido")
	private List<Factura> facturas;
	
	@OneToOne
	@JoinColumn (name = "idCotizacion")
	private Cotizacion cotizacion;
	

	public PedidoCliente(){
		items = new ArrayList<ItemPedido>();
		facturas = new ArrayList<Factura>();
		envios = new ArrayList<Envio>();
		pendiente = true;
	}

	public int getNroPedido() {
		return nroPedido;
	}

	public void setNroPedido(int nroPedido) {
		this.nroPedido = nroPedido;
	}

	public float getMonto() {
		return monto;
	}

	public void setMonto(float monto) {
		this.monto = monto;
	}

	public int getVolumen() {
		return volumen;
	}

	public void setVolumen(int volumen) {
		this.volumen = volumen;
	}

	public Date getFechaCompra() {
		return fechaCompra;
	}

	public void setFechaCompra(Date fechaCompra) {
		this.fechaCompra = fechaCompra;
	}

	public ODV getOdv() {
		return odv;
	}

	public void setOdv(ODV odv) {
		this.odv = odv;
	}

	public List<ItemPedido> getItems() {
		return items;
	}

	public void setItems(List<ItemPedido> items) {
		this.items = items;
	}

	public List<Factura> getFacturas() {
		return facturas;
	}

	public void setFacturas(List<Factura> facturas) {
		this.facturas = facturas;
	}

	public Cotizacion getCotizacion() {
		return cotizacion;
	}

	public void setCotizacion(Cotizacion cotizacion) {
		this.cotizacion = cotizacion;
	}

	public boolean isPendiente() {
		return pendiente;
	}

	public void setPendiente(boolean pendiente) {
		this.pendiente = pendiente;
	}

	public List<Envio> getEnvios() {
		return envios;
	}

	public void setEnvios(List<Envio> envios) {
		this.envios = envios;
	}

	
}
